package com.alibaba.taolele.controller;

import com.alibaba.fastjson.JSON;
import com.alibaba.taolele.datamodel.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 一个controller返回数据的格式十多种多样的，返回数据的方法也是多种多样的。常见的有：
 * 1、返回一个jsp的页面，这个当然需要配置jsp的解析器
 * 2、返回纯数据。
 * 其中返回纯数据的方式有两种：
 * 一种是直接写入到HttpServletResponse的请求体中去。获取一个输出流。
 * 一种是使用注解，@ResponseBody
 */
@Controller
public class DemoController {
    /**
     * <p>
     *     {"userName":"wangmeng","userPass":"123456"}
     * </p>
     * 上面的这种格式就是json，而一般如何转化为json呢？
     * 使用fastjson这个工具包
     *
     * 还有，你看下面的直接写入到response的里面去的方法，从这里有一个问题：
     * Http协议的request和response分别都是用来干嘛的？
     * @param request
     * @param response
     */
    @RequestMapping(value = "/demo/jsondata")
    public void getJsonData(HttpServletRequest request, HttpServletResponse response) {
        User user = new User();
        user.setUserName("wangmeng");
        user.setUserPass("123456");
        String jsonString = JSON.toJSONString(user);
        try {
            PrintWriter writer = response.getWriter();
            writer.print(jsonString);
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @RequestMapping(value = "/demo/jspdemo")
    public ModelAndView jspDemp(HttpServletRequest request, HttpServletResponse response) {
        ModelAndView modelAndView = new ModelAndView("login/success");
        User user = new User();
        user.setUserName("wangmeng");
        user.setUserPass("123456");
        String jsonString = JSON.toJSONString(user);
        modelAndView.addObject("json", jsonString);
        return modelAndView;
    }
}
